#!/usr/bin/env python 
# -*- coding:utf-8 -*-

import re

'''
match、search、findall的区别：
1）match()只匹配字符串的开始，如果字符串开始不符合正则表达式，则匹配失败，函数返回None
2）search()匹配整个字符串，直到找到一个匹配
3）findall()在字符串中找到正则表达式所匹配的所有子串，并返回一个列表，如果有多个匹配模式，则返回元组列表，如果没有找到匹配的，则返回空列表。
'''

# 1) match方法尝试从字符串的起始位置匹配一个模式，如果不是起始位置匹配成功的话，match()就返回none
print "match()方法返回匹配的内容：", (re.match("test", "testadefes")).group()
print "match()方法未匹配到结果返回：", re.match("test", "atestadefes")
print "group()方法返回匹配的内容：", re.match("test", "testadefes").group()
print "span()方法返回匹配结果的位置：", re.match("test", "testadefes").span()

# 2) 匹配任意字符
print "几个点就是匹配几个字符：", (re.match("..", "testadefes")).group()
print "匹配以12开头紧接着是2或3或4的字符串：", (re.match('12[234]','1232s12testasdtest')).group()
print "匹配以12开头紧接着不是2或3或4的字符串：",((re.match('12[^234]','1262s12testasdtest'))).group()
print "匹配以12开头紧接着是小写或大写或数字的字符串：",((re.match('12[a-zA-Z0-9]','1222s12testasdtest'))).group()
print "匹配小写或大写或数字的字符串0次或多次：",((re.match('[a-zA-Z0-9]*','1222s12testasdtest'))).group()

# 3）贪婪方式非贪婪方式
# 匹配0个或1个由前面的正则表达式定义的片段，非贪婪方式
print "匹配数字0次或1次(非贪婪方式，最多匹配一次)：",((re.match('[0-9]?','1222s12testasdtest'))).group()
print "匹配小写或大写或数字的字符串0次或多次：",((re.match('[0-9]{2}','1222s12testasdtest'))).group()
# 匹配0个或1个由前面的正则表达式定义的片段，贪婪方式
# "o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
print "匹配小写或大写或数字的字符串0次或多次：",((re.match('[0-9]{2,}','1222s12testasdtest'))).group()

# 4）re.search 扫描整个字符串并返回第一个成功的匹配。
print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配

